package chapter5.section5

/**
 * 假设需要编码的所有字符的出现概率均不相同。此时的霍夫曼编码树是唯一的吗？
 *
 * 解：是唯一的，因为霍夫曼编码会先统计所有字符出现的频率再向小顶堆中插入数据，和字符出现的顺序无关，
 * 即使合并后的子树和某个字符的概率相同，但由于每次操作的顺序相同，结果也相同
 */
fun main() {
    // 字符串中a出现的概率为50%，b出现的概率为30%，c出现的概率为20%
    val string = "aaaaabbbcc"
    val huffman = Huffman()
    val dump = BinaryDump(8, 8)
    repeat(5) {
        val array = string.toCharArray()
        // 随机打乱数组，比较不同的排列中，霍夫曼编码的前缀是否相同
        array.shuffle()
        val s = String(array)
        println("s: $s")
        compressAndDumpString(s, huffman, dump)
        println()
    }
}